/*
 * @Author: C.
 * @Date: 2023-01-30 10:54:54
 */
export interface IEnums {
  value: any
  label: string
  icon?: string
  color?: string
  [x: string]: any
}

export function createEnumObject(enums: IEnums[]) {
  const defaultItem = {
    value: undefined,
    label: '默认',
    color: '#eee',
  }
  return {
    // 获取单个枚举项
    getItem(value: string, key: string | null = null): IEnums | undefined {
      for (const item of this.getEnums(true)) {
        if (item[key || 'value'] == value) {
          return item
        }
      }
    },
    // 获取所需的key值集合
    getColums(key: string): any[] {
      return this.getEnums(true).map((item) => item[key])
    },
    // 获取单个值
    getColum(column: string, key: string, value: string) {
      const item = this.getItem(value, key)
      if (item) {
        // h(Tag, { color: item.color},item[column]);
        // return h(Tag, { color: item.color }, item[column]);
        return item[column]
      } else {
        return '--'
      }
    },
    // 获取label集合
    getLabels(): any[] {
      return this.getColums('label')
    },
    // 获取值集合
    getValues(): any[] {
      return this.getColums('value')
    },
    // 获取单个label
    getLabel(value: string, key = null): any {
      return this.getColum('label', key || 'value', value)
    },
    // 获取单个值
    getValue(value: string, key = null) {
      return this.getColum('value', key || 'label', value)
    },
    // 获取原始枚举 如果enums的子项中存在引用类型 回造成无限循环
    getEnums(insertDefault = false): IEnums[] {
      const _enums = enums.map((item) => {
        return {
          value: item.value,
          label: item.label,
          color: item.color,
          icon: item.icon,
        }
      })
      return insertDefault ? [defaultItem, ..._enums] : _enums
    },
    // 获取首个默认值
    getDefaultValue(key = 'value', index = 0): string {
      return this.getEnums(true)[index][key]
    },
  }
}
